05 - ANOVA

Auswertung Emprischer Daten

Prof. Dr. David F. Urschler

Welche ANOVAs kennen wir?

einfaktorielle ANOVA

  • between
  • within

mehrfaktorielle ANOVA

  • between
  • within

Mixed ANOVA

einfaktorielle ANOVA - between

Welche Fragen können wir beantworten?

Über die Psychologie hinaus

  • Sind unterschiedliche Produktionslinien unterschiedlich produktiv?

  • Gibt es Unterschiede in der Pünktlichkeit von Flügen in der EU?

  • Haben Menschen Präferenzen für einen bestimmten Humor?

einfaktorielle ANOVA - between

Welche Fragen können wir beantworten?

In der Psychologie

  • Wie wirken unterschiedliche Beleuchtungen auf unsere Stimmung?

  • Unterscheiden sich Psychologinnen von anderen Disziplinen?

  • Wie wirken unterschiedliche LVs auf Studierende?

einfaktorielle ANOVA - between

Vorgehensweise



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

einfaktorielle ANOVA - between

Beispiel

Hat die Social-Media-Plattformen einen Einfluss auf die Wahrnehmung des Inhalts?



einfaktorielle ANOVA - between

Beispiel

Hat die Social-Media-Plattformen einen Einfluss auf die Wahrnehmung des Inhalts?

Warum nicht mehrere t-Tests für unabhängige Stichproben?

  • Anzahl der durchzuführenden t-Tests steigt mit den k Ausprägungen

\[ \begin{aligned} \ j &= \frac{k \cdot (k - 1)}{2} \\ \\ \ j &= \frac{3 \cdot (3 - 1)}{2} \\ \ j &= 3 \\ \end{aligned} \]

einfaktorielle ANOVA - between

Beispiel

Hat die Social-Media-Plattformen einen Einfluss auf die Wahrnehmung des Inhalts?

Warum nicht mehrere t-Tests für unabhängige Stichproben?

  • Mit der Anzahl der durchzuführenden t-Tests steigt steigt der ⍺-Fehler

\[ \begin{aligned} \ \alpha_{kum} &= 1 - (1 - \alpha)^j \\ \\ \ \alpha_{kum} &= 1 - (1 - .05)^3 \\ \ \alpha_{kum} &= .1426 \\ \ \alpha_{kum} &= 14.26 \% \\ \end{aligned} \]

einfaktorielle ANOVA - between

Beispiel

Informationen zum Datensatz ae_anova_one_way.csv

  • demographische Daten (id, age & gen: 0 = weiblich, 1 = männlich)
  • Social-Media-Plattform (smp: 0 = “TikTok”, 1 = “Twitch”, 2 = “Instagram”)
  • Bewertung der Inhalte über drei Items (0 = trifft nicht zu, 7 = trifft voll zu)

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style A fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Daten einlesen

Zeig mir den Code
ds <- read.csv(here::here("ae_anova_one_way.csv"),
               header = TRUE)

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style B fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Übersicht verschaffen



id age gen smp Bew.01 bew_02 BEW.03
1 47 1 2 7 7 7
2 48 1 2 7 7 5
3 33 1 2 6 5 6
4 43 1 2 7 7 7
5 22 0 2 5 5 5
6 43 1 2 4 7 5

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style C fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Namen brauchbar machen

  • händisch mit der rename()-Funktion aus dem tidyverse-Package
Zeig mir den Code
ds |> 
  rename(bew_01 = Bew.01,
         bew_02 = bew_02,
         bew_03 = BEW.03)
  • “bequemer” mit der clean_names()-Funktion aus dem janitor-Package
Zeig mir den Code
ds <- ds |> 
  janitor::clean_names()
id age gen smp bew_01 bew_02 bew_03
1 47 1 2 7 7 7
2 48 1 2 7 7 5

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style D fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Ergeben die Daten Sinn?

Zeig mir den Code
summary(ds)

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style E fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Skalenwerte berechnen

  • Gender-Variable als Faktor-Variable
Zeig mir den Code
ds$gen_f <- factor(ds$gen,
                   levels = c(0, 1),
                   labels = c("w", "m"))
  • Social-Media-Variable als Faktor-Variable
Zeig mir den Code
ds$smp_f <- factor(ds$smp,
                   levels = c(0, 1, 2),
                   labels = c("Tik_Tok", "Twitch", "Insta"))

einfaktorielle ANOVA - between

Beispiel

Skalenwerte berechnen

  • Funktioniert unsere AV?
Zeig mir den Code
ds |> 
  select(starts_with("bew")) |> 
  psych::alpha()

# Oder wir erstellen ein neues Objekt

ca <- ds |> 
  select(c("bew_01", "bew_02", "bew_03"))

psych::alpha(ca)

einfaktorielle ANOVA - between

Beispiel

Skalenwerte berechnen

  • Funktioniert unsere AV? ➜ Wie gut ist das Cronbach’s-⍺?

Reliability analysis   
Call: psych::alpha(x = ca)

  raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
      0.81      0.81    0.74      0.58 4.2 0.018  5.6 1.2     0.57

    95% confidence boundaries 
         lower alpha upper
Feldt     0.77  0.81  0.84
Duhachek  0.77  0.81  0.84

 Reliability if an item is dropped:
       raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
bew_01      0.69      0.69    0.53      0.53 2.3    0.033    NA  0.53
bew_02      0.78      0.78    0.64      0.64 3.6    0.023    NA  0.64
bew_03      0.72      0.72    0.57      0.57 2.6    0.030    NA  0.57

 Item statistics 
         n raw.r std.r r.cor r.drop mean  sd
bew_01 346  0.87  0.87  0.78   0.69  5.6 1.4
bew_02 346  0.82  0.82  0.67   0.61  5.9 1.4
bew_03 346  0.86  0.85  0.74   0.66  5.4 1.5

Non missing response frequency for each item
          0    1    2    3    4    5    6    7 miss
bew_01 0.01 0.01 0.02 0.06 0.10 0.18 0.30 0.32    0
bew_02 0.00 0.01 0.03 0.05 0.07 0.15 0.22 0.47    0
bew_03 0.00 0.03 0.02 0.06 0.12 0.25 0.25 0.27    0

einfaktorielle ANOVA - between

Beispiel

Skalenwerte berechnen

Wie wird der Inhalt bewertet?

Zeig mir den Code
ds <- ds |> 
  rowwise() |> # führt dazu, dass die folgenden Funktionen zeilenweise ausgeführt werden
  mutate(bw_mean = mean(c(bew_01, bew_02, bew_03),
                        na.rm = TRUE))  

# Alternative mit "rowMeans()"

ds$bw_mean <- rowMeans(ds[c("bew_01", "bew_02", "bew_03")],
                       na.rm = TRUE)

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style F fill: #009e73

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen

  • Skalenniveau
  • Unabhängigkeit der Messungen
  • Varianzhomogenität
  • Normalverteilung

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen - Varianzhomogenität

Levene's Test for Homogeneity of Variance (center = median)
       Df F value   Pr(>F)   
group   2  5.7298 0.003567 **
      343                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1



Die Varianzhomogenität ist verletzt ➜ Was nun?

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen - Normalverteilung



Achtung

Die Daten in den einzelnen Bedingungen müssen normalverteilt sein!
Es muss keine Normalverteilung über die gesamten Daten vorliegen!

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Wir rechnen trotzdem, da die ANOVA robust ist, vor allem bei großen Stichproben!

ANOVA

Hierfür nutzen wir die Anova()-Funktion aus dem car-Package

Zeig mir den Code
# Wir müssen zunächst ein Regressionsobjekt erstellen
mod_anova <- lm(bw_mean ~ smp_f,
                data = ds)

## Wir brauchen Typ III Sum of Squares 
mod_III <- car::Anova(mod = mod_anova,
                      type = 3)

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

ANOVA

Anova Table (Type III tests)

Response: bw_mean
             Sum Sq  Df  F value    Pr(>F)    
(Intercept) 2848.40   1 2162.011 < 2.2e-16 ***
smp_f         71.03   2   26.955  1.34e-11 ***
Residuals    451.89 343                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Effektstärke

Zeig mir den Code
effectsize::eta_squared(mod_III)

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

Effektstärke

# Effect Size for ANOVA

Parameter | Eta2 |       95% CI
-------------------------------
smp_f     | 0.14 | [0.08, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Tests

  • Bonferroni-Korrektur
  • Bonferroni-Holms
  • Sidak
  • Scheffe
  • R-E-G-W F
  • R-E-G-W Q
  • Tukey (HSD)

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test

Hierfür nutzen wir die emmeans()-Funktion aus dem emmeans-Package

Zeig mir den Code
# Wir erstellen zunächst ein neues Objekt namens "post" für post-hoc-Test
post <- emmeans::emmeans(mod_anova, # Das "mod_anova"-Objekt haben wir bereits erstellt
                            ~ smp_f) # Hier müssen wir nochmals spezifizieren, welche Ausprägungen miteinander verglichen werden sollen ... warum auch immer

pairs(post, adjust = "tukey" )

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test

 contrast         estimate    SE  df t.ratio p.value
 Tik_Tok - Twitch   -1.041 0.153 343  -6.817  <.0001
 Tik_Tok - Insta    -0.865 0.150 343  -5.774  <.0001
 Twitch - Insta      0.176 0.151 343   1.167  0.4739

P value adjustment: tukey method for comparing a family of 3 estimates 

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test - Effekgrößen

Zeig mir den Code
emmeans::eff_size(post, # Wir nutzen das emmeans-Objekt von vorhin...
                  sigma = sigma(mod_anova), # schätzen die Populationsvarianz (basierend auf dem linearen Modell)
                  edf = df.residual(mod_anova)) # bestimmen die Freiheitsgrade

einfaktorielle ANOVA - between

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test - Effekgrößen

 contrast         effect.size    SE  df lower.CL upper.CL
 Tik_Tok - Twitch      -0.907 0.137 343   -1.178   -0.637
 Tik_Tok - Insta       -0.753 0.134 343   -1.016   -0.491
 Twitch - Insta         0.154 0.132 343   -0.106    0.413

sigma used for effect sizes: 1.148 
Confidence level used: 0.95 

einfaktorielle ANOVA - between

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style G fill: #009e73

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

Deskriptiven Daten

Zeig mir den Code
ds |> 
  group_by(smp_f) |> 
  summarize(Mittelwert = mean(bw_mean,
                              na.rm = TRUE),
            Standardabweichung = sd(bw_mean,
                              na.rm = TRUE))

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

Deskriptiven Daten

smp_f Mittelwert Standardabweichung
Tik_Tok 4.976812 1.348396
Twitch 6.018018 1.017859
Insta 5.841667 1.047840

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

APA-konform

“Eine einfaktorielle ANOVA wurde durchgeführt um zu testen, ob die Wahl der Social-Media-Plattform eine Auswikrung auf die Wahrnehmung des Inhalts hat. Die Ergebnisse zeigen, dass die Social-Media-Plattform eine Auswikrung auf die Wahrnehmung des Inhalts hat, F(2, 343) = 26.95, p < .001, η² = 0.14, 95% CI [0.08, 1.00].
Der Tukey post-hoc Test zeigte einen signifikanten Unterschied zwischen Tik-Tok (M = 4.98, SD = 1.35) und Twitch (M = 6.02, SD = 1.02), p < .001. Zusätzlich zeigtes sich ein signifikanter Unterschied zwischen Tik-Tok und Instagram (M = 5.84, SD = 1.05), p < .001. Der Unterschied zwischen Twitch und Instagram war nicht signifikant, p = .474.”

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

Balkendiagram

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

Balkendiagram

Zeig mir den Code
# Welche Farbe hätte ich denn gerne``
mf <- c("#00AFBB", "#E7B800", "#FC4E07")

# Erstellen des Plots
ds |> 
  ggplot(aes(x = smp_f,
             y = bw_mean,
             fill = smp_f)) +
  stat_summary(fun = "mean" ,         # "stat_summary" - erledig die Arbeit für uns - Mittelwert zu plotten
               geom = "bar",          # Wir hätten gerne Balken
               show.legend = FALSE) + # Wir brauchen keine Legende
  scale_y_continuous(limits = c(0, 7),
                     breaks = c(0:7)) +
  scale_fill_manual(values = mf) +
  labs(x = "",
       y = "Bewertung") +
  theme_classic()

einfaktorielle ANOVA - between

Beispiel

Ergebnis berichten

Violinplot

einfaktorielle ANOVA - between

Übung




Durchlaufen Sie sämtliche Schritte mit dem Alter der Versuchspersonen als AV!

einfaktorielle ANOVA - within

Welche Fragen können wir beantworten?

Über die Psychologie hinaus

  • Gibt es Unterschiede zwischen drei (und mehr) Versuchsbedingungen?

  • Gibt es Unterschiede zwischen drei (und mehr) Messzeitpunkten?

einfaktorielle ANOVA - within

Welche Fragen können wir beantworten?

In der Psychologie

  • Wie wirken unterschiedliche Beleuchtungen auf unsere Stimmung?

  • Führt ein Training zu einer Abnahme von Depressionssymptomen?

einfaktorielle ANOVA - within

Vorgehensweise



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

einfaktorielle ANOVA - within

Beispiel

Wie wirkt sich der Semesterverlauf auf die positive Stimmung aus?


Informationen zum Datensatz ae_anova_one_with.csv

  • demographische Daten (id)

  • Positive Stimmung vor Semesterbeginn (t0_p_01, t0_p_02, t0_p_03)

  • Positive Stimmung vor der Klausur (t1_p_01, t1_p_02, t1_p_03)

  • Positive Stimmung nach der Klausur (t2_p_01, t2_p_02, t2_p_03)

  • Negative Stimmung vor Semesterbeginn (t0_n_01, t0_n_02, t0_n_03)

  • Negative Stimmung vor der Klausur (t1_n_01, t1_n_02, t1_n_03)

  • Negative Stimmung nach der Klausur (t2_n_01, t2_n_02, t2_n_03)

  • 0 = “trifft nicht zu”, 6 = “trifft voll zu”

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style A fill: #009e73

einfaktorielle ANOVA - within

Beispiel

Daten einlesen

Zeig mir den Code
ds <- read.csv(here::here("ae_anova_one_with.csv"),
               header = TRUE)

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style B fill: #009e73

einfaktorielle ANOVA - within

Beispiel

Übersicht verschaffen



id t0_p_01 t0_p_02 t0_p_03 t1_p_01 t1_p_02 t1_p_03 t2_p_01 t2_p_02 t2_p_03 t0_n_01 t0_n_02 t0_n_03 t1_n_01 t1_n_02 t1_n_03 t2_n_01 t2_n_02 t2_n_03
1 3 3 3 3 4 4 2 2 3 5 6 6 4 3 3 2 3 2
2 5 7 5 2 3 2 4 6 5 5 6 6 3 3 1 4 3 3
3 3 2 3 4 3 4 2 4 4 3 3 3 5 4 4 1 4 4
4 3 4 4 2 3 2 3 4 4 6 6 6 4 4 3 NA 4 4
5 3 5 4 3 3 3 2 4 4 NA NA 4 4 4 3 4 4 4
6 4 1 3 2 4 2 4 5 6 6 5 6 4 4 4 4 4 3

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style C fill: #009e73

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style D fill: #009e73

einfaktorielle ANOVA - within

Beispiel

Ergeben die Daten Sinn?

Zeig mir den Code
summary(ds)

einfaktorielle ANOVA - within

Beispiel

Ergeben die Daten Sinn?

einfaktorielle ANOVA - within

Beispiel



flowchart TB

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style E fill: #009e73

einfaktorielle ANOVA - within

Beispiel

Skalenwerte berechnen

  • Funktioniert unsere AV?
Zeig mir den Code
# Chronbach's Alpha - Positive Stimmung - t0
ds |> 
  select(t0_p_01,
         t0_p_02,
         t0_p_03) |> 
  psych::alpha()

# Chronbach's Alpha - Positive Stimmung - t1
ds |> 
  select(t1_p_01,
         t1_p_02,
         t1_p_03) |> 
  psych::alpha()

# Chronbach's Alpha - Positive Stimmung - t2
ds |> 
  select(t2_p_01,
         t2_p_02,
         t2_p_03) |> 
  psych::alpha()

einfaktorielle ANOVA - within

Beispiel

Skalenwerte berechnen

Zeig mir den Code
ds <- ds |> 
  mutate(
    
    t0_p_mean = rowMeans(ds[c("t0_p_01",
                              "t0_p_02",
                              "t0_p_03")],
                         na.rm = TRUE),
    
    t1_p_mean = rowMeans(ds[c("t1_p_01",
                              "t1_p_02",
                              "t1_p_03")],
                         na.rm = TRUE),
    
    t2_p_mean = rowMeans(ds[c("t2_p_01",
                              "t2_p_02",
                              "t2_p_03")],
                         na.rm = TRUE)
    ) 

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style F fill: #009e73

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen

  • AV ist mindestens intervallskaliert
  • Within-Faktor ist nominalskaliert
  • Anabhängigkeit der Messungen
  • Normalverteilung
  • Keine Ausreißer
  • Sphärizität

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Wir benötigen einen Datensatz im long-format

Zeig mir den Code
# Erstellen eines Datensatzes im long-format

ds_l <- ds |> 
  select(
    id,        # Auswählen der benötigten Spalten
    t0_p_mean,
    t1_p_mean,
    t2_p_mean
    ) |> 
  
  pivot_longer(-id) |> 
  
  rename(mz = name,    # umbennen der Spalten
         stim_pos = value) |> 
  mutate(mz = str_remove(mz, "_p_mean"))  # Unnötigen Text entfernen

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Wir benötigen einen Datensatz im long-format

Zeig mir den Code
# Erstellen eines Datensatzes im long-format
head(ds_l)

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen - Normalverteilung

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen - Keine Ausreißer

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Voraussetzungen - Sphärizität

  • kommt gleich!

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

ANOVA

Hierfür nutzen wir die aov_car()-Funktion aus dem afex-Package

Zeig mir den Code
mp_car <- afex::aov_car(stim_pos ~ mz + Error(id/mz), 
              data = ds_l) 
summary(mp_car)

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

             Sum Sq num Df Error SS den Df  F value    Pr(>F)    
(Intercept) 2067.09      1   29.883     49 3389.448 < 2.2e-16 ***
mz            50.74      2   67.866     98   36.638 1.315e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


Mauchly Tests for Sphericity

   Test statistic p-value
mz        0.99824  0.9585


Greenhouse-Geisser and Huynh-Feldt Corrections
 for Departure from Sphericity

    GG eps Pr(>F[GG])    
mz 0.99824  1.371e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

     HF eps   Pr(>F[HF])
mz 1.040601 1.314952e-12

Achtung

Vergessen Sie nicht das afex-Package zu installieren und zu laden!

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Effektstärke

Zeig mir den Code
effectsize::eta_squared(mp_car )

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

Effektstärke

# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
mz        |           0.43 | [0.30, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test

Hierfür nutzen wir die emmeans()-Funktion aus dem emmeans-Package

Zeig mir den Code
# Wir erstellen zunächst ein neues Objekt namens "post" für post-hoc-Test
post <- emmeans::emmeans(mp_car, ~ mz) # Hier müssen wir nochmals spezifizieren, welche Ausprägungen miteinander verglichen werden sollen ... warum auch immer

pairs(post, adjust = "tukey" )

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test

 contrast estimate    SE df t.ratio p.value
 t0 - t1     0.997 0.167 49   5.964  <.0001
 t0 - t2    -0.383 0.169 49  -2.268  0.0701
 t1 - t2    -1.380 0.163 49  -8.461  <.0001

P value adjustment: tukey method for comparing a family of 3 estimates 

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test - Effekgrößen

Zeig mir den Code
emmeans::eff_size(post, # Wir nutzen das emmeans-Objekt von vorhin...
                  sigma = sd(ds_l$stim_pos, # schätzen der Populationsvarianz basierend auf den Daten Modell
                             na.rm = TRUE), 
                  edf = 98) # bestimmen der Freiheitsgrade

einfaktorielle ANOVA - within

Beispiel

einfaktorielle ANOVA - berechnen

post-hoc-Test - Tukey-HSD-Test - Effekgrößen

 contrast effect.size    SE df lower.CL upper.CL
 t0 - t1        0.998 0.182 49    0.633   1.3640
 t0 - t2       -0.384 0.172 49   -0.729  -0.0393
 t1 - t2       -1.382 0.191 49   -1.766  -0.9987

sigma used for effect sizes: 0.9983 
Confidence level used: 0.95 

einfaktorielle ANOVA - within

Beispiel



flowchart LR

A(Daten einlesen) --> 
B(Übersicht verschaffen) --> 
C(Namen brauchbar machen) --> 
D(Ergeben die Daten Sinn?) --> 
E(Skalenwerte berechnen) --> 
F(einfaktorielle ANOVA) --> 
G(Ergebnis berichten)

style G fill: #009e73

einfaktorielle ANOVA - within

Beispiel

Ergebnis berichten

Deskriptiven Daten

Zeig mir den Code
ds_l |> 
  group_by(mz) |> 
  summarize(M = 
              round(
                mean(stim_pos,
                     na.rm = TRUE),
                2),
            SD = 
              round(
                sd(stim_pos,
                   na.rm = TRUE),
                2))

einfaktorielle ANOVA - within

Beispiel

Ergebnis berichten

Deskriptiven Daten

mz M SD
t0 3.92 0.80
t1 2.92 0.79
t2 4.30 0.85

einfaktorielle ANOVA - within

Beispiel

Ergebnis berichten

APA-konform

“Eine einfaktorielle ANOVA wurde durchgeführt um zu testen, ob die sich der Semesterzeitpunkt eine Auswirkung auf die postive Stimmung von Studierenden hat. Die Ergebnisse zeigen, dass der Semesterzeitpunkg eine Auswikrung auf die Wahrnehmung des Inhalts hat, F(2, 98) = 36.00, p < .001, η² = 0.42, 95% CI [0.30, 1.00].
Der Tukey post-hoc Test zeigte einen signifikanten Unterschied vor dem Semesterstart (M = 3.92, SD = 0.80) und vor der Prüfung (M = 2.92, SD = 0.79), t(49) = 5.96, p < .001. Zusätzlich zeigte sich ein signifikanter Unterschied vor der Prüfung und nach der Prüfung (M = 4.30, SD = 0.85), t(49) = 8.46, p < .001. Der Unterschied zwischen Semesterstart und nach der Prüfung war nicht signifikant, t(49) = 2.27, p = .070.”

einfaktorielle ANOVA - within

Beispiel

Ergebnis berichten

graphisch

einfaktorielle ANOVA - between

Übung




  • Durchlaufen Sie sämtliche Schritte mit dem Alter der negativer Stimmung als AV!
  • Erstellen Sie einen Liniendiagramm mit 95% CI